<?php
/**
 * 助手函数
 */

namespace IYUU\sdk\CoolQ;

use Yaf\Registry;

/**
 * 获得当前机器人的配置信息（支持 . 分隔符）
 * @param string|int $key
 * @param null $default
 * @return mixed|null
 */
function getConfig($key = null, $default = null)
{
    $value = Registry::get(Registry_CONFIG_NAME);
    if ($key === null) {
        return $value;
    }
    $key_array = \explode('.', $key);
    foreach ($key_array as $index) {
        if (!isset($value[$index])) {
            return $default;
        }
        $value = $value[$index];
    }
    return $value;
}

/**
 * 获取OneBot机器人对象
 * @return OneBotApi
 */
function getOneBot(): OneBotApi
{
    return Registry::get(Registry_ONEBOT_NAME);
}

/**
 * 获取上下文
 * @return Context
 */
function getContext(): Context
{
    return Registry::get(Registry_CONTEXT_NAME);
}

/**
 * 过滤Emoji表情
 * - 原理：遍历字符串中的每个字符，如果该字符的长度为4个字节，就将其删除
 * @param $str
 * @return array|string|string[]|null
 */
function filterEmoji($str)
{
    return preg_replace_callback(
        '/./u',
        function (array $match) {
            return strlen($match[0]) >= 4 ? '' : $match[0];
        },
        $str
    );
}

/**
 * 解析QQ号码
 * @param string $str
 * @return int
 */
function parseQQ(string $str): int
{
    if (preg_match('#\[CQ:at,qq=(\d+)\]#', $str, $QQ)) {
        return (int)$QQ[1];
    } else {
        return 0;
    }
}

/**
 * 生成表格数据
 * @param array $data
 * @param int $col 控制多少列
 * @return string
 */
function showTable(array $data = [], int $col = 1): string
{
    $i = 0;
    $row = [];
    $table = new Table();
    foreach ($data as $key => $item) {
        $row[] = ($key + 1) . ". " . $item;
        if (++$i === $col) {
            $table->addRow($row);
            $i = 0;
            $row = [];
        }
    }
    $table->setStyle('borderless');
    return $table->render();
}

/**
 * 验证匹配模式
 * - 匹配模式：1相等, 2包含, 3正则
 * @param int $match_type
 * @return bool
 */
function verifyMatchType(int $match_type): bool
{
    // 匹配模式：1相等,2包含,3正则
    return in_array($match_type, [1, 2, 3]);
}
